package day10;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;

public class FilterApple {

    /**
     * 根据颜色筛选苹果
     * @param apples 苹果列表
     * @param color 颜色
     * @return 符合条件的苹果列表
     */
    public static List<Apple> filterByColor(List<Apple> apples, String color) {
        List<Apple> result = new ArrayList<>();
        if (apples == null || color == null) {
            return result;
        }

        for (Apple apple : apples) {
            // 使用Objects.equals来安全比较，避免null值问题
            if (apple != null && Objects.equals(color, apple.getColor())) {
                result.add(apple);
            }
        }
        return result;
    }

    /**
     * 根据重量筛选苹果
     * @param apples 苹果列表
     * @param weight 重量阈值
     * @return 重量大于等于阈值的苹果列表
     */
    public static List<Apple> filterByWeight(List<Apple> apples, double weight) {
        List<Apple> result = new ArrayList<>();
        if (apples == null) {
            return result;
        }

        for (Apple apple : apples) {
            if (apple != null && apple.getWeight() >= weight) {
                result.add(apple);
            }
        }
        return result;
    }

    /**
     * 根据品种筛选苹果
     * @param apples 苹果列表
     * @param type 品种
     * @return 符合条件的苹果列表
     */
    public static List<Apple> filterByType(List<Apple> apples, String type) {
        List<Apple> result = new ArrayList<>();
        if (apples == null || type == null) {
            return result;
        }

        for (Apple apple : apples) {
            // 使用Objects.equals来安全比较，避免null值问题
            if (apple != null && Objects.equals(type, apple.getName())) {
                result.add(apple);
            }
        }
        return result;
    }

    public static List<Double> map(List<Apple> datas, Object getWeight) {
        return null;
    }


    // 在 FilterApple 类中
    public static <T, R> List<R> map(List<T> list, Function<T, R> mapper) {
        if (list == null || mapper == null) {
            return new ArrayList<>();
        }
        List<R> result = new ArrayList<>();
        for (T item : list) {
            result.add(mapper.apply(item));
        }
        return result;
    }

}
